package com.szjz.elasticsearch.eshelper.wrapper;


import com.szjz.elasticsearch.eshelper.functionainterface.ESFunction;

import java.io.Serializable;
import java.util.List;

/**
 * @author 史博
 * @desc 条件包装类
 * @date 2021/1/17 下午5:20 周日
 */
public interface ConditionWrapper<T, R> extends Wrapper, Serializable {


    /**
     * or
     *
     * @param column 字段
     * @param val    值
     * @return children
     */
    R or(ESFunction<T, ?> column, Object val);

    /**
     * or LIKE '%值'
     *
     * @param column 字段
     * @param val    值
     * @return children
     */
    R orLikeLeft(ESFunction<T, ?> column, Object val);

    /**
     * or LIKE '值%'
     *
     * @param column 字段
     * @param val    值
     * @return children
     */
    R orLikeRight(ESFunction<T, ?> column, Object val);

    /**
     * or LIKE '%值%'
     *
     * @param column 字段
     * @param val    值
     * @return children
     */
    R orLike(ESFunction<T, ?> column, Object val);

    /**
     * 等于 =
     *
     * @param column 字段
     * @param val    值
     * @return children
     */
    R eq(ESFunction<T, ?> column, Object val);

    /**
     * 不等于 !=
     *
     * @param column 字段
     * @param val    值
     * @return children
     */
    R neq(ESFunction<T, ?> column, Object val);

    /**
     * 大于 >
     *
     * @param column 字段
     * @param val    值
     * @return children
     */
    R gt(ESFunction<T, ?> column, Object val);

    /**
     * 小于 <
     *
     * @param column 字段
     * @param val    值
     * @return children
     */
    R lt(ESFunction<T, ?> column, Object val);

    /**
     * 大于等于 >=
     *
     * @param column 字段
     * @param val    值
     * @return children
     */
    R gte(ESFunction<T, ?> column, Object val);

    /**
     * 小于等于 <=
     *
     * @param column 字段
     * @param val    值
     * @return children
     */
    R lte(ESFunction<T, ?> column, Object val);

    /**
     * in
     *
     * @param column 字段
     * @param values 值
     * @return children
     */
    R in(ESFunction<T, ?> column, List<?> values);

    /**
     * is null
     *
     * @param column 字段
     * @return
     */
    R isNull(ESFunction<T, ?> column);

    /**
     * is not null
     *
     * @param column 字段
     * @return
     */
    R isNotNull(ESFunction<T, ?> column);

    /**
     * LIKE '%值'
     *
     * @param column 字段
     * @param val    值
     * @return children
     */
    R likeLeft(ESFunction<T, ?> column, Object val);

    /**
     * LIKE '值%'
     *
     * @param column 字段
     * @param val    值
     * @return children
     */
    R likeRight(ESFunction<T, ?> column, Object val);

    /**
     * LIKE '%值%'
     *
     * @param column 字段
     * @param val    值
     * @return children
     */
    R like(ESFunction<T, ?> column, Object val);

    /**
     * LIKE '?值'
     * 只能匹配左边一个字符
     *
     * @param column 字段
     * @param val    值
     * @return children
     */
    R likeLeftOne(ESFunction<T, ?> column, Object val);

    /**
     * LIKE '值?'
     * 只能匹配右边一个字符
     *
     * @param column 字段
     * @param val    值
     * @return children
     */
    R likeRightOne(ESFunction<T, ?> column, Object val);


}
